package com.haier.cre.commonframe.utils;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * 项目名：CommonLibrary
 * 包 名：com.haier.cre.commonframe.utils
 * 创建人：18002063
 * 日 期：2018/10/16
 * 简 述：sp的工具类,用于保存和获取
 */
public class SharePreferencesUtils {
    /**
     * 默认的缓存文件的文件名
     */
    public final static String NAME = "haier_sp";
    public static SharePreferencesUtils STU;


    public static SharePreferencesUtils getInstance() {
        if (null == STU)
            STU = new SharePreferencesUtils();
        return STU;
    }

    /**
     * 保存String类型的值
     *
     * @param context 上下文
     * @param name    文件名称
     * @param key     key值
     * @param value   value值
     * @return 保存成功与否
     */
    public boolean save(Context context, String name, String key, String value) {
        SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sp.edit();
        edit.putString(key, value);
        return edit.commit();
    }

    /**
     * 保存String类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String key, String value) {
        return save(context, NAME, key, value);
    }

    /**
     * 保存bolean类型的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String name, String key, boolean value) {
        SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sp.edit();
        edit.putBoolean(key, value);
        return edit.commit();
    }

    /**
     * 保存bolean类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String key, boolean value) {
        return save(context, NAME, key, value);
    }

    /**
     * 保存int类型的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String name, String key, int value) {
        SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sp.edit();
        edit.putInt(key, value);
        return edit.commit();
    }

    /**
     * 保存int类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String key, int value) {
        return save(context, NAME, key, value);
    }

    /**
     * 保存long类型的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String name, String key, long value) {
        SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sp.edit();
        edit.putLong(key, value);
        return edit.commit();
    }

    /**
     * 保存long类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String key, long value) {
        return save(context, NAME, key, value);
    }

    /**
     * 保存float类型的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String name, String key, float value) {
        SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sp.edit();
        edit.putFloat(key, value);
        return edit.commit();
    }

    /**
     * 保存float类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public boolean save(Context context, String key, float value) {
        return save(context, NAME, key, value);
    }

    /**
     * 取得保存在SharedPreferences中的String类型的值
     *
     * @param context
     * @param name
     * @param key
     * @return
     */
    public String getStringValue(Context context, String name, String key) {
        return getStringValue(context, name, key, "");
    }

    /**
     * 取得保存在SharedPreferences中的String类型的值,可自定义value的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public String getStringValue(Context context, String name, String key, String value) {
        return context.getSharedPreferences(name, Context.MODE_PRIVATE).getString(key, value);
    }

    /**
     * 取得保存在SharedPreferences中的String类型的值
     *
     * @param context
     * @param key
     * @return
     */
    public String getStringValue(Context context, String key) {
        return getStringValue(context, NAME, key, "");
    }

    /**
     * 取得保存在SharedPreferences中的boolean类型的值
     *
     * @param context
     * @param name
     * @param key
     * @return
     */
    public boolean getBooleanValue(Context context, String name, String key) {
        return getBooleanValue(context, name, key, false);
    }

    /**
     * 取得保存在SharedPreferences中的boolean类型的值
     *
     * @param context
     * @param key
     * @return
     */
    public boolean getBooleanValue(Context context, String key) {
        return getBooleanValue(context, NAME, key, false);
    }

    /**
     * 取得保存在SharedPreferences中的boolean类型的值 ,可以自定义value值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public boolean getBooleanValue(Context context, String name, String key, boolean value) {
        return context.getSharedPreferences(name, Context.MODE_PRIVATE).getBoolean(key, value);
    }

    /**
     * 取得保存在SharedPreferences中的boolean类型的值 ,可以自定义value值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public boolean getBooleanValue(Context context, String key, boolean value) {
        return getBooleanValue(context, NAME, key, value);
    }

    /**
     * 取得保存在SharedPreferences中的int类型的值
     *
     * @param context
     * @param key
     * @return
     */
    public int getIntValue(Context context, String key) {
        return getIntValue(context, NAME, key, 0);
    }

    /**
     * 取得保存在SharedPreferences中的int类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public int getIntValue(Context context, String key, int value) {
        return getIntValue(context, NAME, key, value);
    }

    /**
     * 取得保存在SharedPreferences中的int类型的值
     *
     * @param context
     * @param name
     * @param key
     * @return
     */
    public int getIntValue(Context context, String name, String key) {
        return getIntValue(context, name, key, 0);
    }

    /**
     * 取得保存在SharedPreferences中的int类型的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public int getIntValue(Context context, String name, String key, int value) {
        return context.getSharedPreferences(name, Context.MODE_PRIVATE).getInt(key, value);
    }

    /**
     * 取得保存在SharedPreferences中的long类型的值
     *
     * @param context
     * @param key
     * @return
     */
    public long getLongValue(Context context, String key) {
        return getLongValue(context, NAME, key, 0L);
    }

    /**
     * 取得保存在SharedPreferences中的long类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public long getLongValue(Context context, String key, long value) {
        return getLongValue(context, NAME, key, value);
    }

    /**
     * 取得保存在SharedPreferences中的long类型的值
     *
     * @param context
     * @param name
     * @param key
     * @return
     */
    public long getLongValue(Context context, String name, String key) {
        return getLongValue(context, name, key, 0L);
    }

    /**
     * 取得保存在SharedPreferences中的long类型的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public long getLongValue(Context context, String name, String key, long value) {
        return context.getSharedPreferences(name, Context.MODE_PRIVATE).getLong(key, value);
    }

    /**
     * 取得保存在SharedPreferences中的float类型的值,默认返回0.0f
     *
     * @param context
     * @param key
     * @return
     */
    public float getFloatValue(Context context, String key) {
        return getFloatValue(context, NAME, key, 0.0f);
    }

    /**
     * 取得保存在SharedPreferences中的float类型的值
     *
     * @param context
     * @param key
     * @param value
     * @return
     */
    public float getFloatValue(Context context, String key, long value) {
        return getFloatValue(context, NAME, key, value);
    }

    /**
     * 取得保存在SharedPreferences中的float类型的值 ,默认返回0.0f
     *
     * @param context
     * @param name
     * @param key
     * @return
     */
    public float getFloatValue(Context context, String name, String key) {
        return getFloatValue(context, name, key, 0.0f);
    }

    /**
     * 取得保存在SharedPreferences中的float类型的值
     *
     * @param context
     * @param name
     * @param key
     * @param value
     * @return
     */
    public float getFloatValue(Context context, String name, String key, float value) {
        return context.getSharedPreferences(name, Context.MODE_PRIVATE).getFloat(key, value);
    }

    /**
     * 判断SharePreferences中是否已经存在某个关键字
     *
     * @param context
     * @param key
     * @return
     */
    public boolean contairn(Context context, String key) {
        return contairn(context, NAME, key);
    }

    /**
     * 判断SharePreferences中是否已经存在某个关键字
     *
     * @param context
     * @param name
     * @param key
     * @return
     */
    public boolean contairn(Context context, String name, String key) {
        return context.getSharedPreferences(name, Context.MODE_PRIVATE).contains(key);
    }

    /**
     * 清空保存在SharePreferences中的所有数据
     *
     * @param ctx
     */
    public void cleanUp(Context ctx) {
        cleanUp(ctx, NAME);
    }

    /**
     * 清空保存在SharePreferences中的所有数据
     *
     * @param ctx
     * @param name sp的文件名称
     */
    public void cleanUp(Context ctx, String name) {
        SharedPreferences sp = ctx.getSharedPreferences(name, Context.MODE_PRIVATE);
        sp.edit().clear().commit();
    }
}
